from fastapi import APIRouter
from pydantic import BaseModel


class Item(BaseModel):
    name:str
    age:int
    sex:str
    
    # def __init__(self, name = None, age = None, sex = None):
    #     self.name = name
    #     self.age = age
    #     self.sex = sex


    def __str__(self):
        return "name:"+self.name+" age:"+str(self.age)+" sex:"+self.sex


# 定义一个 Controller 类, 用于处理请求
# 模拟 MVC 中的 Controller 类
# 该类包含一个路由列表, 用于存储路由信息
# 该类包含一个方法, 用于注册路由信息
class ItemController:
    def __init__(self):
        self.list = []
        self.router = APIRouter()  # 创建 APIRouter 实例, 模拟 Controller 类
        self.register_routes()

    def register_routes(self):
        # 定义一个 GET 请求处理函数, 用于获取一个 item 的信息
        # 参数通过url的方式传递, 格式为 /items/1?q=test
        # 返回一个 item 的信息, 格式为{"item_id":1, "q":"test"}
        @self.router.get("/items/{item_id}")
        def read_item(self,item_id: int, q: str = None):
            return {"item_id": item_id, "q": q}

        # 定义一个 POST 请求处理函数, 用于添加一个新的 item
        # 并返回一个成功的消息
        # 参数通过json的方式传递, 格式为{"name":"item1", "age":1, "sex":"male"}
        @self.router.post("/add_item")
        def add_item(item: Item):
            self.list.append(item)
            return {"message": "Item added successfully"}

        # 定义一个 GET 请求处理函数, 用于获取所有的 item 信息
        # 返回一个 item 列表, 格式为[{"name":"item1", "age":1, "sex":"male"}, {"name":"item2", "age":2, "sex":"female"}]
        @self.router.get("/get_items")
        def get_items():
            return {"items": self.list}


        # 定义一个 GET 请求处理函数, 用于获取一个 item 的信息
        # 参数通过url的方式传递, 格式为 /get_item_by_name?name=item1
        # 返回一个 item 的信息, 格式为{"name":"item1", "age":1, "sex":"male"}
        @self.router.get("/get_item_by_name")
        def get_item_by_name(name: str):
            for item in self.list:
                if item.name == name:
                    return item
            return {"message": "Item not found"}

    def get_router(self):
        return self.router
